package com.jjm.interceptores;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.jdo.PersistenceManager;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.appengine.api.datastore.Blob;
import com.jjm.db.PMF;
import com.jjm.entidades.Photo;

/**
 * Servlet implementation class PhotoServlet
 */
public class PhotoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PhotoServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String keyString  = request.getParameter("key");
        String size       = request.getParameter("size");

        PersistenceManager pm = PMF.get().getPersistenceManager();
        Photo photo = null;

        Blob imageData = null;
        byte[] resp = null;
        
        if("".equals(keyString))
        {
//        	//cargar imagen por defecto (en resp)
//        	String fileName = ClassLoader.getSystemResource("EmpresaDefecto.jpg").getFile();
//        	resp = getBytesFromFile(new File(fileName));
        }
        else
        {
        	photo = (Photo) pm.getObjectById(Photo.class, keyString);
        	 if (size != null && size.equals("full")) {
                 imageData = photo.getImage();
              } else { // We set the default to just the thumbnail
                 imageData = photo.getThumbnail();
              }
        	 
        	 resp = imageData.getBytes();
        }

       

        response.setContentType("image/jpeg");
        response.getOutputStream().write(resp);
        response.getOutputStream().flush();

     }

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request,response);
	}

	
	private byte[] getBytesFromFile(File file) throws IOException {
	    InputStream is = new FileInputStream(file);

	    // Get the size of the file
	    long length = file.length();

	    // You cannot create an array using a long type.
	    // It needs to be an int type.
	    // Before converting to an int type, check
	    // to ensure that file is not larger than Integer.MAX_VALUE.
	    if (length > Integer.MAX_VALUE) {
	        // File is too large
	    }

	    // Create the byte array to hold the data
	    byte[] bytes = new byte[(int)length];

	    // Read in the bytes
	    int offset = 0;
	    int numRead = 0;
	    while (offset < bytes.length
	           && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
	        offset += numRead;
	    }

	    // Ensure all the bytes have been read in
	    if (offset < bytes.length) {
	        throw new IOException("Could not completely read file "+file.getName());
	    }

	    // Close the input stream and return bytes
	    is.close();
	    return bytes;
	}
}
